package org.example.springboot.utils;

import java.util.HashMap;
import java.util.Map;

public class CronExpressionConverter {

    // 用于映射中文星期到数字
    private static final Map<String, String> DAY_MAP = new HashMap<>();
    static {
        DAY_MAP.put("周日", "1");
        DAY_MAP.put("周一", "2");
        DAY_MAP.put("周二", "3");
        DAY_MAP.put("周三", "4");
        DAY_MAP.put("周四", "5");
        DAY_MAP.put("周五", "6");
        DAY_MAP.put("周六", "7");
    }

    /**
     * 将中文的星期字符串（如"周一、周二、周三"）转换为Quartz Cron表达式。
     *
     * @param dayStrings 中文的星期字符串（如"周一、周二、周三"）
     * @return 对应的Cron表达式
     */
    public static String convertToCron(String dayStrings) {
        // 分割输入的字符串，获取每个星期的名称
        String[] days = dayStrings.split("、");

        // 创建一个StringBuilder来构建Cron表达式的星期部分
        StringBuilder cronWeekPart = new StringBuilder();
        
        // 遍历每个星期，获取对应的数字并拼接到cronWeekPart中
        for (String day : days) {
            String dayNumber = DAY_MAP.get(day.trim());
            if (dayNumber != null) {
                if (cronWeekPart.length() > 0) {
                    cronWeekPart.append(",");
                }
                cronWeekPart.append(dayNumber);
            } else {
                System.out.println("警告: 找不到对应的星期转换: " + day);
            }
        }

        // 构建完整的Cron表达式：假设执行时间为每天12点00分
        return String.format("0 0 12 ? * %s", cronWeekPart.toString());
    }


    public static String convertToCron(String[] dayStrings, String time) {
        // 创建一个StringBuilder来构建Cron表达式的星期部分
        StringBuilder cronWeekPart = new StringBuilder();
        // 遍历每个星期，获取对应的数字并拼接到cronWeekPart中
        for (String day : dayStrings) {
            String dayNumber = DAY_MAP.get(day.trim());
            if (dayNumber != null) {
                if (cronWeekPart.length() > 0) {
                    cronWeekPart.append(",");
                }
                cronWeekPart.append(dayNumber);
            } else {
                System.out.println("警告: 找不到对应的星期转换: " + day);
            }
        }

        // 解析时分秒字符串，假设格式为 "HH:mm:ss"
        String[] timeParts = time.split(":");
        if (timeParts.length != 3) {
            System.out.println("警告: 时间格式不正确，应该是HH:mm:ss");
            return null;
        }

        String hour = timeParts[0];
        String minute = timeParts[1];
        String second = timeParts[2];

        // 构建完整的Cron表达式：包括时分秒和星期部分
        return String.format("%s %s %s ? * %s", second, minute, hour, cronWeekPart.toString());
    }

    // 测试
    public static void main(String[] args) {
        String dayStrings = "周一、周三、周五";  // 输入星期字符串，多个星期用“、”分隔
        String time = "10:00:00";  // 输入时间字符串，格式为 HH:mm:ss

       // String cronExpression = convertToCron(dayStrings, time);
        /*if (cronExpression != null) {
            System.out.println("生成的Cron表达式: " + cronExpression);
        }*/
    }
}
